#Boa:Dialog:ABMclientes

import wx
from wx.lib.anchors import LayoutAnchors
import consultasBD
import utiles
import Buscaclientes
import sincronizar_tabla  

def create(parent):
    return ABMclientes(parent)

[wxID_ABMCLIENTES, wxID_ABMCLIENTESBOTONGUARDAR, wxID_ABMCLIENTESBOTONLIMPIAR, 
 wxID_ABMCLIENTESBOTONSALIR, wxID_ABMCLIENTESCHECKBOX1, 
 wxID_ABMCLIENTESCUITNRO, wxID_ABMCLIENTESDATOSENTREGARESUMEN, 
 wxID_ABMCLIENTESINACUMULADOS, wxID_ABMCLIENTESINCODIGO, wxID_ABMCLIENTESINCP, 
 wxID_ABMCLIENTESINDIA, wxID_ABMCLIENTESINDIRECCION, wxID_ABMCLIENTESINEMAIL, 
 wxID_ABMCLIENTESINLOCALIDAD, wxID_ABMCLIENTESINMES, wxID_ABMCLIENTESINNOMBRE, 
 wxID_ABMCLIENTESINPROVINCIA, wxID_ABMCLIENTESINSUCURSAL, 
 wxID_ABMCLIENTESINTELEFONO, wxID_ABMCLIENTESOBSERVACIONES, 
 wxID_ABMCLIENTESRADIOBOX1, wxID_ABMCLIENTESSITUACIONFISCAL, 
 wxID_ABMCLIENTESSTATICLINE1, wxID_ABMCLIENTESSTATICTEXT1, 
 wxID_ABMCLIENTESSTATICTEXT2, wxID_ABMCLIENTESSTATICTEXT3, 
 wxID_ABMCLIENTESSTATICTEXT4, wxID_ABMCLIENTESSTATICTEXT5, 
 wxID_ABMCLIENTESSTATICTEXT6, wxID_ABMCLIENTESTEXTCP, 
 wxID_ABMCLIENTESTEXTCTRL1, wxID_ABMCLIENTESTIPODOC, 
 wxID_ABMCLIENTESTXACUMULADOS, wxID_ABMCLIENTESTXTCODIGO, 
 wxID_ABMCLIENTESTXTCONTACTO, wxID_ABMCLIENTESTXTCUMPLE, 
 wxID_ABMCLIENTESTXTDIRECCION, wxID_ABMCLIENTESTXTEMAIL, 
 wxID_ABMCLIENTESTXTLOCALIDAD, wxID_ABMCLIENTESTXTNOMBRE, 
 wxID_ABMCLIENTESTXTPROVINCIA, wxID_ABMCLIENTESTXTSUCURSAL, 
 wxID_ABMCLIENTESTXTTELEFONO, 
] = [wx.NewId() for _init_ctrls in range(43)]

class ABMclientes(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_ABMCLIENTES, name='ABMclientes',
              parent=prnt, pos=wx.Point(82, 71), size=wx.Size(734, 364),
              style=wx.TAB_TRAVERSAL | wx.DEFAULT_DIALOG_STYLE,
              title='ABM Clientes')
        self.SetClientSize(wx.Size(726, 337))
        self.SetToolTipString('ABMClientes')

        self.tipodoc = wx.ComboBox(choices=['DNI', 'LC', 'CI', 'CUIT', 'CUIL',
              'Pasaporte', 'LE'], id=wxID_ABMCLIENTESTIPODOC, name='tipodoc',
              parent=self, pos=wx.Point(96, 48), size=wx.Size(75, 21), style=0,
              value='DNI')
        self.tipodoc.SetLabel('DNI')

        self.cuitnro = wx.TextCtrl(id=wxID_ABMCLIENTESCUITNRO, name='cuitnro',
              parent=self, pos=wx.Point(265, 52), size=wx.Size(80, 21), style=0,
              value='')
        self.cuitnro.SetMaxLength(11)

        self.innombre = wx.TextCtrl(id=wxID_ABMCLIENTESINNOMBRE,
              name='innombre', parent=self, pos=wx.Point(96, 78),
              size=wx.Size(250, 21), style=0, value='')
        self.innombre.SetMaxLength(50)
        self.innombre.SetThemeEnabled(False)
        self.innombre.Bind(wx.EVT_KILL_FOCUS, self.OnInnombreKillFocus)

        self.indireccion = wx.TextCtrl(id=wxID_ABMCLIENTESINDIRECCION,
              name='indireccion', parent=self, pos=wx.Point(96, 106),
              size=wx.Size(250, 21), style=0, value='')
        self.indireccion.SetMaxLength(50)
        self.indireccion.Bind(wx.EVT_KILL_FOCUS, self.OnIndireccionKillFocus)

        self.intelefono = wx.TextCtrl(id=wxID_ABMCLIENTESINTELEFONO,
              name='intelefono', parent=self, pos=wx.Point(96, 141),
              size=wx.Size(152, 21), style=0, value='')
        self.intelefono.SetMaxLength(30)

        self.situacionfiscal = wx.ComboBox(choices=['Inscripto', 'Cons. Final',
              'Monotributo'], id=wxID_ABMCLIENTESSITUACIONFISCAL,
              name='situacionfiscal', parent=self, pos=wx.Point(96, 168),
              size=wx.Size(100, 21), style=0, value='Cons. Final')
        self.situacionfiscal.SetLabel('Cons. Final')

        self.inlocalidad = wx.TextCtrl(id=wxID_ABMCLIENTESINLOCALIDAD,
              name='inlocalidad', parent=self, pos=wx.Point(416, 51),
              size=wx.Size(133, 21), style=0, value='')
        self.inlocalidad.SetMaxLength(25)
        self.inlocalidad.Bind(wx.EVT_KILL_FOCUS, self.OnKillLocalidad)

        self.incp = wx.TextCtrl(id=wxID_ABMCLIENTESINCP, name='incp',
              parent=self, pos=wx.Point(416, 80), size=wx.Size(72, 21), style=0,
              value='')

        self.inemail = wx.TextCtrl(id=wxID_ABMCLIENTESINEMAIL, name='inemail',
              parent=self, pos=wx.Point(416, 108), size=wx.Size(133, 21),
              style=0, value='')
        self.inemail.SetMaxLength(50)

        self.checkBox1 = wx.CheckBox(id=wxID_ABMCLIENTESCHECKBOX1,
              label='No enviar e-mail', name='checkBox1', parent=self,
              pos=wx.Point(416, 132), size=wx.Size(112, 13), style=0)
        self.checkBox1.SetValue(False)

        self.inprovincia = wx.TextCtrl(id=wxID_ABMCLIENTESINPROVINCIA,
              name='inprovincia', parent=self, pos=wx.Point(612, 51),
              size=wx.Size(100, 21), style=0, value='')
        self.inprovincia.SetMaxLength(25)
        self.inprovincia.Bind(wx.EVT_KILL_FOCUS, self.OnKillProvincia)

        self.india = wx.TextCtrl(id=wxID_ABMCLIENTESINDIA, name='india',
              parent=self, pos=wx.Point(612, 76), size=wx.Size(24, 21), style=0,
              value='00')
        self.india.SetMaxLength(2)

        self.inmes = wx.TextCtrl(id=wxID_ABMCLIENTESINMES, name='inmes',
              parent=self, pos=wx.Point(636, 76), size=wx.Size(24, 21), style=0,
              value='00')
        self.inmes.SetMaxLength(2)

        self.observaciones = wx.TextCtrl(id=wxID_ABMCLIENTESOBSERVACIONES,
              name='observaciones', parent=self, pos=wx.Point(358, 160),
              size=wx.Size(354, 56), style=0, value='')
        self.observaciones.SetMaxLength(500)

        self.botonguardar = wx.Button(id=wxID_ABMCLIENTESBOTONGUARDAR,
              label='Guardar', name='botonguardar', parent=self,
              pos=wx.Point(624, 304), size=wx.Size(88, 24), style=0)
        self.botonguardar.Bind(wx.EVT_BUTTON, self.OnBotonguardarButton,
              id=wxID_ABMCLIENTESBOTONGUARDAR)

        self.botonlimpiar = wx.Button(id=wxID_ABMCLIENTESBOTONLIMPIAR,
              label='Limpiar', name='botonlimpiar', parent=self,
              pos=wx.Point(528, 304), size=wx.Size(88, 24), style=0)
        self.botonlimpiar.Bind(wx.EVT_BUTTON, self.OnLimpiarFormulario,
              id=wxID_ABMCLIENTESBOTONLIMPIAR)

        self.botonsalir = wx.Button(id=wxID_ABMCLIENTESBOTONSALIR,
              label='Cancelar', name='botonsalir', parent=self,
              pos=wx.Point(432, 304), size=wx.Size(87, 24), style=0)
        self.botonsalir.Bind(wx.EVT_BUTTON, self.OnCancelar,
              id=wxID_ABMCLIENTESBOTONSALIR)

        self.txtnombre = wx.StaticText(id=wxID_ABMCLIENTESTXTNOMBRE,
              label='Nombre', name='txtnombre', parent=self, pos=wx.Point(16,
              80), size=wx.Size(37, 13), style=0)

        self.txtdireccion = wx.StaticText(id=wxID_ABMCLIENTESTXTDIRECCION,
              label=u'Direcci\xf3n', name='txtdireccion', parent=self,
              pos=wx.Point(16, 109), size=wx.Size(43, 13), style=0)

        self.txtcodigo = wx.StaticText(id=wxID_ABMCLIENTESTXTCODIGO,
              label='Codigo', name='txtcodigo', parent=self, pos=wx.Point(142,
              7), size=wx.Size(33, 15), style=0)
        self.txtcodigo.Show(False)

        self.incodigo = wx.TextCtrl(id=wxID_ABMCLIENTESINCODIGO,
              name='incodigo', parent=self, pos=wx.Point(184, 6),
              size=wx.Size(80, 21), style=0, value='')
        self.incodigo.SetEditable(False)
        self.incodigo.Show(False)

        self.txttelefono = wx.StaticText(id=wxID_ABMCLIENTESTXTTELEFONO,
              label=u'Tel\xe9fono', name='txttelefono', parent=self,
              pos=wx.Point(14, 136), size=wx.Size(42, 13), style=0)

        self.txtemail = wx.StaticText(id=wxID_ABMCLIENTESTXTEMAIL,
              label='E-Mail', name='txtemail', parent=self, pos=wx.Point(359,
              107), size=wx.Size(28, 13), style=0)

        self.txtlocalidad = wx.StaticText(id=wxID_ABMCLIENTESTXTLOCALIDAD,
              label='Localidad', name='txtlocalidad', parent=self,
              pos=wx.Point(359, 51), size=wx.Size(44, 13), style=0)

        self.txtprovincia = wx.StaticText(id=wxID_ABMCLIENTESTXTPROVINCIA,
              label='Provincia', name='txtprovincia', parent=self,
              pos=wx.Point(564, 53), size=wx.Size(43, 13), style=0)

        self.txtcumple = wx.StaticText(id=wxID_ABMCLIENTESTXTCUMPLE,
              label='Cumple', name='txtcumple', parent=self, pos=wx.Point(565,
              78), size=wx.Size(35, 13), style=0)

        self.txacumulados = wx.StaticText(id=wxID_ABMCLIENTESTXACUMULADOS,
              label='$ Acumulados', name='txacumulados', parent=self,
              pos=wx.Point(14, 201), size=wx.Size(66, 13), style=0)

        self.inacumulados = wx.TextCtrl(id=wxID_ABMCLIENTESINACUMULADOS,
              name='inacumulados', parent=self, pos=wx.Point(96, 199),
              size=wx.Size(100, 21), style=0, value='0.0')
        self.inacumulados.SetEditable(False)

        self.txtcontacto = wx.StaticText(id=wxID_ABMCLIENTESTXTCONTACTO,
              label='Observaciones', name='txtcontacto', parent=self,
              pos=wx.Point(360, 148), size=wx.Size(71, 13), style=0)

        self.txtsucursal = wx.StaticText(id=wxID_ABMCLIENTESTXTSUCURSAL,
              label='Sucursal', name='txtsucursal', parent=self,
              pos=wx.Point(16, 6), size=wx.Size(40, 13), style=0)

        self.insucursal = wx.TextCtrl(id=wxID_ABMCLIENTESINSUCURSAL,
              name='insucursal', parent=self, pos=wx.Point(98, 6),
              size=wx.Size(30, 21), style=0, value='')
        self.insucursal.SetEditable(False)

        self.staticText1 = wx.StaticText(id=wxID_ABMCLIENTESSTATICTEXT1,
              label=u'Situaci\xf3n Fiscal', name='staticText1', parent=self,
              pos=wx.Point(14, 166), size=wx.Size(72, 13), style=0)

        self.staticText2 = wx.StaticText(id=wxID_ABMCLIENTESSTATICTEXT2,
              label='Nro. Documento', name='staticText2', parent=self,
              pos=wx.Point(182, 54), size=wx.Size(78, 13), style=0)

        self.staticText3 = wx.StaticText(id=wxID_ABMCLIENTESSTATICTEXT3,
              label='Tipo Documento', name='staticText3', parent=self,
              pos=wx.Point(16, 54), size=wx.Size(77, 13), style=0)

        self.staticText4 = wx.StaticText(id=wxID_ABMCLIENTESSTATICTEXT4,
              label=u'(D\xeda/Mes)', name='staticText4', parent=self,
              pos=wx.Point(668, 75), size=wx.Size(46, 13), style=0)

        self.staticLine1 = wx.StaticLine(id=wxID_ABMCLIENTESSTATICLINE1,
              name='staticLine1', parent=self, pos=wx.Point(17, 224),
              size=wx.Size(695, 8), style=0)

        self.textcp = wx.StaticText(id=wxID_ABMCLIENTESTEXTCP,
              label='Cod.Postal', name='textcp', parent=self, pos=wx.Point(359,
              80), size=wx.Size(52, 13), style=0)

        self.datosentregaresumen = wx.TextCtrl(id=wxID_ABMCLIENTESDATOSENTREGARESUMEN,
              name='datosentregaresumen', parent=self, pos=wx.Point(448, 256),
              size=wx.Size(208, 21), style=0, value='@')

        self.radioBox1 = wx.RadioBox(choices=["SI. Recibir el resumen", "No"],
              id=wxID_ABMCLIENTESRADIOBOX1, label='Resumen Cta. Cte.',
              majorDimension=2, name='radioBox1', parent=self, pos=wx.Point(32,
              240), size=wx.Size(264, 56), style=wx.RA_SPECIFY_COLS)

        self.staticText5 = wx.StaticText(id=wxID_ABMCLIENTESSTATICTEXT5,
              label='Donde Entregar el resumen:', name='staticText5',
              parent=self, pos=wx.Point(312, 256), size=wx.Size(136, 13),
              style=0)

        self.staticText6 = wx.StaticText(id=wxID_ABMCLIENTESSTATICTEXT6,
              label='Tarjeta Sussan', name='staticText6', parent=self,
              pos=wx.Point(280, 8), size=wx.Size(72, 13), style=0)

        self.textCtrl1 = wx.TextCtrl(id=wxID_ABMCLIENTESTEXTCTRL1,
              name='textCtrl1', parent=self, pos=wx.Point(360, 8),
              size=wx.Size(128, 21), style=0, value='')
        self.textCtrl1.SetEditable(False)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.insucursal.ChangeValue(utiles.getSucursalActiva())
        self.tipodoc.SetEditable(False)
        self.situacionfiscal.SetEditable(False)

    def _guardar_cliente(self):
        self.incodigo.ChangeValue(utiles.secuencia('cliente',utiles.getSucursalActiva()))
        fechaActual = utiles.getfechaInverse()
        fechaCumple = self.india.GetValue()+"/"+self.inmes.GetValue()
        if self.checkBox1.GetValue():
            listanegra = "1"
        else:
            listanegra = "0"
        print str(self.radioBox1.Selection)
        r1 = "INSERT into cliente (idcliente,nombre,direccion,localidad,\n"
        r2 = "provincia,cp,telefono,acumulados,observaciones,email,\n"
        r3 = "cumple,situacionfiscal,tipodoc,nrodoc,fechaalta,\n"
        r4 = "reciberesumen,donderesumen,listanegra,tarjetasussan) VALUES (\n"
        r5 = "'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')" % \
                        (self.incodigo.GetValue(),\
                         self.innombre.GetValue(),\
                         self.indireccion.GetValue(),\
                         self.inlocalidad.GetValue(),\
                         self.inprovincia.GetValue(),\
                         self.incp.GetValue(), \
                         self.intelefono.GetValue(),\
                         self.inacumulados.GetValue(), \
                         self.observaciones.GetValue(),\
                         self.inemail.GetValue(),\
                         fechaCumple, \
                         self.situacionfiscal.GetLabel(),\
                         self.tipodoc.GetLabel(),\
                         self.cuitnro.GetValue(), \
                         str(fechaActual), \
                         str(self.radioBox1.Selection), \
                         str(self.datosentregaresumen.GetValue()),\
                         listanegra,\
                         self.textCtrl1.GetLabel())
        sql = r1+r2+r3+r4+r5
        sincronizar_tabla.addChange(sql=sql)
        consultasBD.executaSinCommit(None, sql)         
    
    def OnBotonguardarButton(self, event):
        idcliente = self.incodigo.GetValue()
        verificacion = self.verificar()
        if not verificacion[0]:
            utiles.mensaje(self,verificacion[1])
            return

        try:
            consultasBD.begin()
            self._guardar_cliente()
            consultasBD.commit()
            sincronizar_tabla.syncServerTables(self, ["cliente"])
            utiles.mensaje(self, "El cliente se guardo y transmitio correctamente")                        
        except sincronizar_tabla.SyncError:
            utiles.mensaje(self, "El cliente se guardo \n pero no termino de transmitirse por favor realize un sincronizacion")    
        except Exception, e:
            print e.__str__()
            utiles.mensaje(self, "NO se pudo guardar el cliente")    
            consultasBD.rollback()                                         
            
        self.Close()            

    def controlCaracter(self,aux,tipo = 0):
        if tipo == 0:
            for caracter in aux: #texto con numeros, puntos, comas, guiones, espacios y caracteres acentuados, dieresis y acentos franceses
                if (ord(caracter) not in range(65,91)) and \
                   (ord(caracter) not in range(97,123)) and \
                   (ord(caracter) not in [129,130,132,133,137,138,139,141,148,149,151,160,161,162,163,164,165,248]) and \
                   (ord(caracter) not in range(48,58)) and \
                   (caracter not in ["."," ","-",","]):
                       return True
        elif tipo == 1: #nombres
            for caracter in aux:
                if (ord(caracter) not in range(65,91)) and \
                   (ord(caracter) not in range(97,123)) and \
                   (caracter not in ["."," ","*"]):
                       return True
        elif tipo == 2: #numeros con guiones y parentesis
            for caracter in aux:
                if (ord(caracter) not in range(48,58)) and \
                   (caracter not in ["-","(",")"]):
                       return True
        elif tipo == 3: #numeros sin caracteres
            for caracter in aux:
                if (ord(caracter) not in range(48,58)):
                       return True
        elif tipo == 4: #correos validos
            if aux.count("@") != 1:
                return True
            for caracter in aux:
                if (ord(caracter) not in range(65,91)) and \
                   (ord(caracter) not in range(97,123)) and \
                   (ord(caracter) not in range(48,58)) and \
                   (caracter not in [".","-","_","@"]):
                       return True
        elif tipo == 5: #valores numericos / saldos / acumulados, etc
            if aux.count(".") > 1:
                return True
            for caracter in aux:
                if (ord(caracter) not in range(48,58)) and \
                   (caracter not in ["."]):
                       return True
        return False

    def verificar(self):
        error = ""
        #VERIFICACION DE NO NULIDAD
        if (self.innombre.GetValue() == ""):
            return (False, "Nombre no puede estar vacio")
        #VERIFICACION DE CARACTERES INVALIDOS EN CAMPOS TEXTOS Y NUMERICOS
        #verificar caracteres raros en nombre
        aux = self.innombre.GetValue()
        if aux != "": self.innombre.ChangeValue(aux.strip())
        if aux != "":
            if self.controlCaracter(aux, 1): error += "Caracteres invalidos en Nombre\n"
        #verificar caracteres raros en direccion
        aux = self.indireccion.GetValue()
        if aux != "": self.indireccion.ChangeValue(aux.strip())
        if aux != "":
            if self.controlCaracter(aux): error += "Caracteres invalidos en Direccion\n"
        #verificar caracteres raros en localidad
        aux = self.inlocalidad.GetValue()
        if aux != "": self.inlocalidad.ChangeValue(aux.strip())
        if aux != "":
            if self.controlCaracter(aux): error += "Caracteres invalidos en Localidad\n"
        #verificar caracteres raros en provincia
        aux = self.inprovincia.GetValue()
        if aux != "": self.inprovincia.ChangeValue(aux.strip())
        if aux != "":
            if self.controlCaracter(aux, 1): error += "Caracteres invalidos en Provincia\n"
        #verificar caracteres raros en telefono
        aux = self.intelefono.GetValue()
        if aux != "": self.intelefono.ChangeValue(aux.strip())
        aux = self.intelefono.GetValue()
        if aux != "":
            if self.controlCaracter(aux,2): error += "Caracteres invalidos en Telefono\n"
        #verificar caracteres raros en acumulados
        if self.inacumulados.GetValue() == "": self.inacumulados.ChangeValue("0.0")
        aux = self.inacumulados.GetValue()
        if aux != "": self.inacumulados.ChangeValue(aux.strip())
        aux = self.inacumulados.GetValue()
        if aux != "":
            if self.controlCaracter(aux,5): error += "Caracteres invalidos en Acumulados\n"
        #verificar caracteres raros en email
        aux = self.inemail.GetValue()
        if aux != "": self.inemail.ChangeValue(aux.strip())
        aux = self.inemail.GetValue()
        if aux != "":
            aux = self.inemail.GetValue()
            if self.controlCaracter(aux,4): error += "Caracteres invalidos en e-mail\n"
        #verificar caracteres raros en numero documento
        aux = self.cuitnro.GetValue()
        if aux != "": self.cuitnro.ChangeValue(aux.strip())
        aux = self.cuitnro.GetValue()
        if aux != "":
            if self.controlCaracter(aux,3): error += "Caracteres invalidos en Nro. de Documento\n"
        #verificar caracteres raros en numero dia
        aux = self.india.GetValue()
        if aux != "": self.india.ChangeValue(aux.strip())
        aux = self.india.GetValue()
        if aux != "":
            if self.controlCaracter(aux,3): error += "Caracteres invalidos en Dia\n"
        #verificar caracteres raros en numero mes
        aux = self.inmes.GetValue()
        if aux != "": self.inmes.ChangeValue(aux.strip())
        aux = self.inmes.GetValue()
        if aux != "":
            if self.controlCaracter(aux,3): error += "Caracteres invalidos en Mes\n"
        
        #CONTROL DE FECHAS
        #verificacion de fechas de nacimiento correctas (el anio no va por cortesia)
        if ("Dia" not in error) and ("Mes" not in error):
            marcaError = False
            dia = self.india.GetLabel()
            mes = self.inmes.GetLabel()
            if len(dia)!=2 or len(mes)!=2:
                marcaError = True
                error += "Dia y Mes deben contener dos digitos numericos\nEjemplos: 02, 12, 30, 04, 11"
                self.india.ChangeValue("00")
                self.inmes.ChangeValue("00")
            if not marcaError:
                try:
                    dia = int(self.india.GetValue())
                except:
                    error+= "Dia invalido (001)"
                    self.india.ChangeValue("00")
                    marcaError = True
                try:
                    mes = int(self.inmes.GetValue())
                except:
                    error+= "Mes invalido"
                    self.inmes.ChangeValue("00")
                    marcaError = True
            if not marcaError:
                if dia == 0 or mes == 0:
                    error+= "Dia/Mes invalido (no puede ser 0)"
                else:
                    if not marcaError and mes not in range(1,13):
                        error += "Mes invalido\n"
                        self.india.ChangeValue("00")
                        self.inmes.ChangeValue("00")
                        marcaError = True
                    if not marcaError and (dia<0 or dia>31):
                        error += "Dia invalido (002)"
                        self.india.ChangeValue("00")
                        self.inmes.ChangeValue("00")
                        marcaError = True
                    if not marcaError and mes == 2 and dia > 28:
                        error += "Dia invalido (003)"
                        self.india.ChangeValue("00")
                        self.inmes.ChangeValue("00")
                        marcaError = True
                    if not marcaError and mes in [4,6,9,11]:
                        if dia>30:
                            error += "Dia invalido (004)"
                            self.india.ChangeValue("00")
                            self.inmes.ChangeValue("00")
                            marcaError = True
                
##            if ((len(dia) == 2) and (len(mes) == 2)):
##                dia = int(dia)
##                mes = int(mes)
##                if (dia != 0 or mes != 0):
##                    if mes not in range(1,13):
##                        error += "Mes invalido\n"
##                        self.india.ChangeValue("00")
##                        self.inmes.ChangeValue("00")
##                    else:
##                        if dia not in range(1,31):
##                            error += "Dia invalido\n"
##                            self.india.ChangeValue("00")
##                            self.inmes.ChangeValue("00")
##                        else:
##                            if (mes == 2) and (dia > 28):
##                                error += "Dia invalido para el Mes indicado\n"
##                                self.india.ChangeValue("00")
##                                self.inmes.ChangeValue("00")
##                            elif (mes in [4,6,9,11]):
##                                if dia > 30: 
##                                    error += "Dia invalido para el Mes indicado\n"
##                                    self.india.ChangeValue("00")
##                                    self.inmes.ChangeValue("00")
##            else:
##                if ((dia != "") or (mes != "")):
##                    error += "Dia y Mes deben contener dos digitos numericos\nEjemplos: 02, 12, 30, 04, 11"
##                self.india.ChangeValue("00")
##                self.inmes.ChangeValue("00")
                
                
        #CONTROL DE DOCUMENTOS
        if error == "":
            situacion = self.situacionfiscal.GetLabel()
            if situacion == "":
                error += "Debe indicarse la situacion fiscal del cliente\n"
            tipoDoc = self.tipodoc.GetLabel()
            if tipoDoc == "":
                error += "Debe indicarse un tipo de documento\n"

            numeroDoc = self.cuitnro.GetValue()
            if numeroDoc == "":
                self.cuitnro.ChangeValue("99999999")

            if tipoDoc in ["CUIL","CUIT"]:
                if not utiles.validarCuit(numeroDoc):
                    error += "Numero CUIT/CUIL incorrecto. Verifique"

            if ((situacion == "Inscripto") or (situacion == "Monotributo")) and (tipoDoc != "CUIT"):
                error += "Para la Situacion Fiscal informada\ndebe introducir CUIT como Tipo de Documento\n"
            
        if error != "":
            return (False, error)
        
        return (True,"")

    def OnLimpiarFormulario(self, event):
        self.innombre.ChangeValue("")
        self.indireccion.ChangeValue("")
        self.inlocalidad.ChangeValue("")
        self.inprovincia.ChangeValue("")
        self.intelefono.ChangeValue("")
        self.inemail.ChangeValue("")
        self.india.ChangeValue("00")
        self.inmes.ChangeValue("00")
        self.inacumulados.ChangeValue("0.0")
        self.observaciones.ChangeValue("")
        self.textCtrl1.SetLabel("")
        self.situacionfiscal.SetLabel("Cons. Final")
        self.tipodoc.SetLabel("DNI")
        self.cuitnro.ChangeValue("")
        self.checkBox1.SetValue(False)

    def OnCancelar(self, event):
        self.Close()
        return ""
        
    def Muestraid(self):
        return self.incodigo.GetValue()

    def OnInnombreKillFocus(self, event):
        aux = self.innombre.GetValue()
        self.innombre.SetValue(aux.upper())

    def OnIndireccionKillFocus(self, event):
        aux = self.indireccion.GetValue()
        self.indireccion.SetValue(aux.upper())

    def OnKillLocalidad(self, event):
        aux = self.inlocalidad.GetValue()
        self.inlocalidad.SetValue(aux.upper())

    def OnKillProvincia(self, event):
        aux = self.inprovincia.GetValue()
        self.inprovincia.SetValue(aux.upper())
